page.tsx 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. "use client";
  2. import { AgentPayInfo, claimAgentPayReward, getAgentPayInfo } from "@/api/activity";
  3. import AdSwiperBox from "@/components/AdSwiperBox";
  4. import CustomButton from "@/components/CustomButton";
  5. import InviteBox from "@/components/InviteBox";
  6. import ShareText from "@/components/ShareText";
  7. import { useRouter } from "@/i18n/routing";
  8. import { formatAmount } from "@/utils";
  9. import { Toast } from "antd-mobile";
  10. import clsx from "clsx";
  11. import { useTranslations } from "next-intl";
  12. import React from "react";
  13. import styles from "./page.module.scss";
  14. const Page = () => {
  15. const router = useRouter();
  16. const [data, setData] = React.useState<AgentPayInfo>();
  17. const t = useTranslations();
  18. React.useEffect(() => {
  19. getInfo();
  20. }, []);
  21. const getInfo = async () => {
  22. const res = await getAgentPayInfo();
  23. if (res.code === 200) {
  24. setData(res.data);
  25. }
  26. };
  27. const doClaim = async () => {
  28. Toast.show({ icon: "loading" });
  29. try {
  30. const res: any = await claimAgentPayReward();
  31. if (res.code === 200 && res?.data?.code === 0) {
  32. Toast.show({ content: t("code.200") });
  33. return;
  34. }
  35. throw new Error(res.code.toString());
  36. } catch (err: any) {
  37. Toast.show({ icon: "fail", content: t(`code.${err?.message || 400}`) });
  38. }
  39. };
  40. return (
  41. <div className="p-[.1rem]">
  42. <InviteBox></InviteBox>
  43. <div className={clsx(styles.box)}>
  44. <div className="flex items-center border-b-[1px] border-[var(--textColor4)] pb-[.1rem]">
  45. <div className="flex flex-1 flex-col items-center border-r-[1px] border-[var(--textColor4)] py-[.04rem]">
  46. <div className="text-[14px] font-normal">Convidados</div>
  47. <div className="mt-[.06rem] flex items-center">
  48. <i className="iconfont icon-fangke2 mr-[.1rem] text-[22px] text-[var(--textColor4)]"></i>
  49. <span className="text-[18px] font-black">
  50. {data?.total_user_num || 0}
  51. </span>
  52. </div>
  53. </div>
  54. <div className="flex flex-1 flex-col items-center py-[.04rem]">
  55. <div className="text-[14px] font-normal">Total promocional</div>
  56. <div className="mt-[.06rem] flex items-center">
  57. <span className="text-[18px] font-black text-[var(--textColor4)]">
  58. R$ {formatAmount(data?.total_pay_amount || 0)}
  59. </span>
  60. </div>
  61. </div>
  62. </div>
  63. <div className="flex flex-col items-center pb-[.05rem] pt-[.15rem]">
  64. <div>Usuários que recarregaram</div>
  65. <div className="mt-[.06rem] flex items-center">
  66. <i className="iconfont icon-fangke2 mr-[.1rem] text-[22px] text-[var(--textColor4)]"></i>
  67. <span className="text-[18px] font-black">{data?.direct_user_num || 0}</span>
  68. </div>
  69. <div className="mt-[.25rem]">Pode ser resgatado</div>
  70. <span className="mt-[.15rem] text-[24px] font-black text-[var(--textColor4)]">
  71. R$ {formatAmount(data?.reward_amount || 0)}
  72. </span>
  73. <CustomButton
  74. className="mt-[.1rem] !w-[1.5rem] !py-[.08rem]"
  75. disabled={!data?.reward_amount || data?.reward_amount <= 0}
  76. onClick={doClaim}
  77. >
  78. Receba
  79. </CustomButton>
  80. </div>
  81. </div>
  82. <div className="mt-[.1rem] flex items-center justify-between">
  83. <CustomButton className={styles.agentBtn} onClick={() => router.push("/fission")}>
  84. <i className="iconfont icon-hongbao mr-[.1rem] scale-[1.6] transform text-[var(--primary-button)]"></i>
  85. <span className="text-[var(--textColor1)]">Agente</span>
  86. </CustomButton>
  87. <CustomButton
  88. className={styles.agentBtn}
  89. onClick={() => router.push("/raffleWheel")}
  90. >
  91. <i className="iconfont icon-spin mr-[.1rem] scale-[1.1] transform text-[var(--primary-button)]"></i>
  92. <span className="text-[var(--textColor1)]">Ganhe R$100</span>
  93. </CustomButton>
  94. </div>
  95. <div className={styles.toRank} onClick={() => router.push("/rank")}>
  96. <img className={styles.adBg} src="/fission/jackpot_bg.webp" alt="" />
  97. <div className="absolute bottom-[0] left-[.3rem] top-[0] flex flex-col items-center justify-center pb-[.05rem]">
  98. <div className="text-[16px] font-black text-[var(--textColor3)]">
  99. Ranking de Agentes
  100. </div>
  101. <div
  102. className={clsx(
  103. "agentesRank tect-[14px] relative flex w-fit items-center justify-center rounded-[20px] px-[32px] py-[4px] font-black text-[var(--textColor3)]",
  104. styles.toRankBtn
  105. )}
  106. >
  107. Entrar
  108. </div>
  109. </div>
  110. </div>
  111. <div className="mt-[15px] flex flex-col gap-[10px] break-all rounded-[var(--borderRadius)] bg-[#fff] p-[15px] py-[20px] text-[12px]">
  112. <span>
  113. Quando o amino que você convidou fizer uma recarga, você receberá{" "}
  114. <span className="text-[var(--textColor4)]">
  115. {(data?.direct_commission_rate || 0) * 100}%
  116. </span>{" "}
  117. do valor recarregado porele
  118. </span>
  119. <span>
  120. Quando o amigo que o seu amigo convidou fizer uma recarga, você receberá{" "}
  121. <span className="text-[var(--textColor4)]">
  122. {" "}
  123. {(data?.secondary_commission_rate || 0) * 100}%
  124. </span>{" "}
  125. do valor recarregado por ele.
  126. </span>
  127. <span>
  128. Você receberá uma comissão sobre cada recarga, então quanto mais recargas forem
  129. feitas, maior será o seu ganho!
  130. </span>
  131. <img src="/agent/H7_yaoqing_zhishitu_icon.webp" alt="" />
  132. </div>
  133. <div className="mt-[15px] px-[15px] text-[14px] text-[var(--textColor2)]">
  134. Prêmio obtido
  135. </div>
  136. <div className="mt-[.1rem] rounded-[var(--borderRadius)] bg-[#fff]">
  137. <div className="flex items-center justify-between">
  138. <div className="flex-1 py-[.08rem] text-center">Nome</div>
  139. <div className="flex-1 py-[.08rem] text-center">Valor</div>
  140. <div className="flex-1 py-[.08rem] text-center">Recompensa</div>
  141. </div>
  142. {!!data?.commissions?.length &&
  143. data.commissions.map((item) => {
  144. return (
  145. <div key={item.user_id} className="flex items-center justify-between">
  146. <div className="flex-1 py-[.08rem] text-center">{item.user_id}</div>
  147. <div className="flex-1 py-[.08rem] text-center">
  148. {item.pay_amount}
  149. </div>
  150. <div className="flex-1 py-[.08rem] text-center">
  151. {item.commission_amount}
  152. </div>
  153. </div>
  154. );
  155. })}
  156. {!data?.commissions?.length && (
  157. <div className="flex items-center justify-center py-[1.5rem] text-[12px]">
  158. Sem dados disponíveis
  159. </div>
  160. )}
  161. </div>
  162. <ShareText text={data?.agent_text}></ShareText>
  163. <AdSwiperBox
  164. className="mt-[.1rem]"
  165. text={data?.agent_text}
  166. images={data?.agent_images}
  167. ></AdSwiperBox>
  168. </div>
  169. );
  170. };
  171. export default Page;